Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
наличия триггера на получение урона для каждого юнита
так делать нельзя
это же полный бред
просто добавляем событие к уже существующему триггеру вот и всё
нормального сборщика мусора в варе нет и скорее всего не будет(если близы даже рб поленились убрать то о нормальном gc можно забыть)
так же не стоит забывать что сборщик мусора срабатывает не сразу
если мне не изменяет память то save сохраняет объекты и значения переменных
а при загрузке восстанавливает связи (заносит значения в переменные, регистрирует события и прочее)
так что всякий мусор просто не проходит
а вообще лучше забей на это
в варе есть более серьёзные утечки от которых нельзя избавиться
например руны
+ создание и удаление триггеров вредит намного больше чем пара сотен килобайт памяти
да и вряд ли у тебя за игру будет 50к юнитов
События триггера никак нельзя удалить, можно только удалить триггер (с кондишенами и акшенами).
А кстати вот - xgm.guru/p/wc3/venomanser
Будет несомненно полезно, как правильно удалять триггеры.
Да и вовсе полезно для общего развития.
Второй комп сломан поэтому проверить не могу, почему у меня подозрение, что оно должно работать.... Хотя могу и ошибаться, нормально делал карты года 2 назад.
скрин ошибки со строкой на которую ругается
а сори, плохо прочитал код Tobi123 дело говорит
ты даже не знаешь что такое локальные переменные
короче в статьи и не вылазь от туда пока не узнаешь
Только с мемхаком, нужно подгрузить свою ддлку, которая грубо говоря от имени хоста сама хостанет следующую карту, пригласив всех игроков.
Но думаю это не так уж и просто реализуемо, а те функции что есть - только для одиночной кампании.
локальный - на машине конкретного юзера, не путать с mui/mpi (муи - действует для каждого юнита, mpi - для каждого игрока)
все баффы будут действовать, хоть их там будет штук 100 (хотя я столько еще не вешал)
тоже самое касается и тригго баффов, которые легко реализовать с помощью запрещенного спеллбука и как сказал quq_CCCP - таймера
даже если бафф не отображается, но его точно вешали на юнита - система его найдет
а если ты пытаешься сделать бафф Palus Knight из Lineage II - поиграйся с отрицательным по урону берсерком (где кстати есть и скорость бега), или со спеллом свитка скорости
хотя легче будет просто обложить юнита блокираторами прохода на время действия, потому что полную остановку сделать без костылей не удастся
Отключить прочие способности - если этот параметр включен то при касте канала ты не можешь двигаться и юзать скилы. Следовать в течении времени - точно не знаю,но предполагаю что это длительность приказа или длительность самой способности. Тип цели - если "Цель - точка" ,то можно юзать куда угодно кроме юнитов. Если "Цель - юнит", тоже самое только на оборот.Если оба то можно кастовать и на юнита и на точку.Если"Нет цели", то способность активируется без наведения(как стомп например)
Параметры:
Изображение - отображение иконки скила
Изображение указателя - Если установить эту галку, то еще понадобится установить "Характеристики: Область воздействия" на не-нулевую величину. (например, 200). Когда вы будете прицеливаться заклинанием, на карте будет круг такого радиуса, которого вы установили(Вспомним свена из доты,круг радиуса есть,а юзать можно только на юнитов)
Материальное заклинание - при установленной галке "Изображение указателя цели" и области воздействия, равной 0, будет исчезать указатель цели, если не установлена эта галка
Универсальное заклинание - Если эта галка стоит, то заклинание будет действовать на существ, невосприимчивых к магии, если не стоит, то при касте на неуязвимого к магии юнита (например, голема) вы получите сообщение типа "Этот воин невосприимчив к магии"
Только ручное применение - Этот параметр определяет как будет использоватся заклинание если отдать приказ сразу группе юнитов с этой способностью. Если эта галка стоит, то способность использует только один из группы, если нет - то сразу вся группа.
Создаёшь массивы с координатами позиций, с типами юнитов, с самими юнитами. Если юнит из переменной помирает - создаёшь нового, заносишь в переменную вместо убитого и даёшь приказ двигаться в соответствующую точку.
Событие - получает прдмет
Условие - прдмет который надо
Действие - Создать юнит, либо замнетить(прверащение): так же вариант, когда подбирает нужный предмет, давать скил трансформа и приказать его заюать
Таурен Тауреныч, так ты ж его мгновенно удаляешь. Зачем добавлять и сразу убирать способность? Или удаляется предмет, а не скилл?
Попробуй удалять хотя бы через 0.00 сек.
Прочитал твой второй вопрос по этой теме. Всё-таки да, дело было в мгновенном удалении.
Способности нужно дать юниту, и все. Если эффект временный, используем вэйт/wait (по-русски ждать) или таймеры, по истечении которого удаляем способность. Но вэйты не рекомендуются для использования.
событие - юнит применяет способность
условие -применяемая способность == тип твоей способности
действие - добавить способность
ждать 15 сек.
действие - удалить способность
TeX13, можно, сделано в доте для варкравта...
Способов реализации много, от 'ANeg' (способность механика, Enginering Upgrade, рус-Техника), которым можно свапать скиллы, до таймеров которые будут удалять способность у героя а потом вручать ему снова, таким образом скидывая кулдаун, ну и так же хак на пямять, с помощью которого можно менять кулдаун как захочется, щяс все кому не лень юзают эту наработку.
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
Проблема в том, что, если в этой точке построено здание, то IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY) не помогает (это терраин проверяет, а вот то что там построено или нет ему пофиг). Посмотрел в триггерах, есть только текстуры земли - уберспласты (там эти текстурки для здания) - нет функции такой в библиотеке jngp для проверки точки. Пробовал через группу, но там своя заминка (походу выборка ловит тех юнитов, точки которых попали в выборку, а не на целиком. Точно не проверял, но не работает с группой), Clamp, решил через проверку
if (IssueBuildOrderById(YT, 'hhou', x, y) == false) then если не может построить, значит там здание или что-нибудь еще. Clamp, помог еще твоя ссылка ExecuteFunc. видимо у меня лимит был, не хотело работать (просто дебаг не отобрал. и раб стоял). Хотя это уже не нужно было
А да слегка подвисает на секунду =(
Урра короче без лагов сделал (версия 3), подредактировать недоработку и будет норм
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
Вместо (юнит триггера) вставишь своего героя. (Скрин внизу)
Редактор обьектов ---> Способности ---> нейтрально-враждебные ---> герои ---> повышение характеристик (редактируешь или создаешь нестандартную и редактируешь под себя)
GRESHNIK1, я хз как ты пробовал
у меня всё работает нормально
плавающий юнит не может быть создан на суше
у тебя же корабль скорее всего не является плавающим т.е. не является кораблём
Делал из корабля из компании. Просьба залить пример, чтобы понять что я делаю не так.
Trickster, Это защита, чтобы её снять нужны познания в устройстве формата карт.
А так подобная защита очень примитивна, открыть такую карту и восстановить все в ручную не сложно, но долговато...
Пробовать не хочу, но предложу вот, что:
Если цель - защитить карту от подглядывания. То при старте игры или инициализации (если получится) можно запустить триггер с условием Вид: карта разведана is Set == да (процитировал текст условия из Гуи), действие - замкнутый цикл, или вызвать фатальную ошибку, вылет и т.д. Суть в том, что когда игрок запустит карту с такими параметрами, то тупо закрашить варик.
Оказывается, отрицательную высоту для летающих зданий можно устанавливать, если поставить Art - Elevation - Sample Ponts: 0 SсRealm:
А еще можно повернуть нездание а том сделать зданием и поворот останется , правда в игре может сместитьтя внезапно))
А вместе с этим способом это, вроде бы как, решило мою проблему. Спасибо всем, кто попытался помочь :) Melissa:
И ещё заметка - делать декорации юнитами - больная идея. Если их будет сотня другая - то ещё не конец света, но несколько сотен таких "декораций" - жди проседаний в производительности.
Да там и сотни не наберется, так что все нормально :)
спутал, эта фунция прячет хендл, а не рисовку обеспечивает
function IsFlagBitSet takes integer flags, integer bit returns boolean
if bit!=0 then
return flags/bit*0x80000000 != 0
endif
return false
endfunction
function RMem takes integer addr returns integer
if addr<0 or addr>0x7FFFFFFF then
return 0
endif
return Memory[addr/4]
endfunction
function AddAlwaysVisibleFlag takes unit u returns nothing
local integer a=ConvertHandle(u)
if a>0 and IsFlagBitSet(RMem(a+0x20),0x10)==false then
call WMem(a+0x20,RMem(a+0x20)+0x10)
endif
endfunction
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
Georgy12, call CreateFogModifierRectBJ( true, игрок, FOG_OF_WAR_VISIBLE, область)
call CreateFogModifierRectBJ( true, игрок, FOG_OF_WAR_VISIBLE, область) вот так
либо
local fogmodifier loc = CreateFogModifierRect(whichPlayer, whichFogState, r, true, false)
call FogModifierStart(loc)
ты установил Player(3) значит это 4 игрок а ты в тест карту запускает 1 игрок пойми!!!
чтобы все игроки видел облость надо циклом от 0 до 11
Понял в чем был косяк, ни одна из функций модификации видимости не имела эффекта, потому что перед ней был следующий вызов модификации тумана с параментром true:
Скорее всего просто наткнулись на фатальный баг, едва ли тут память причём-то. В мои старые карты например можно тоже фатальчик словить и необязательно после 2 часов игры) Посмотри файл ошибки в папке варика, если там часто повторяется что-нить типа A008 или U026 то дело в способности/улучшении/юните и вычислить причину легко, но не всегда ты увидишь в логе все улики...
Impertus, не знаю точно как сработает с "Эликсиром ярости", но handleID при морфе Ворона не изменяется. Возможно, и с остальными морфами тоже. Обращайся к юниту через его ID. Как находить этот ID и что это такое можешь почитать ТУТ
Потому что огромный Нестандартные объекты может тысяч или больше или Спелл герой до 100 уровень.
из них 60 загрузка просто висит на 1/5.
Если нетак? Проверь если есть файлы war3map.j папка Game\WarcraftIII, надо удалить файл. очень давно тоже 1 раз что за вылет или неправильно выполняет триггер.
Есть способы ускорить загрузку карты не экономя в редакторе объектов
Есть Widgetizer, там очень быстрая загрузка игра, но плохо работает спелл или текст.
Сделай стандартную ауру хила и при ее изучении добавляй и задавай нужный уровень ауры торнадо. У нее даже иконки нет, так что очень удобно.
Я могу расписать, как, но сложно, так что пусть другие ответят, мб есть вариант проще.
Если без мемхака: сделай абилу на основе предметной на повышение брони с 31 уровнем, на первом 0 повышения, на последнем +30. Что дальше делать, сам догадайся...
Берем основную модель, возможно, вообще без мяса, только с гусеницами, но с кучей точек крепления. Также берем кучу моделей-аттачметов, представляющих собой эти самые пушки, корпуса и все прочее. При выборе характеристик модели через диалог или интерфейс соответственно создаем на основной модели эффекты-аттачменты, будет собрана техника. Такие штуки, как двигатель и прочие невидные извне элементы будут скорее входить в математическую модель юнита, но это также можно запилить. Название танка - сразу не скажу, есть ли триггер на смену, но на таблице рекордов можно отобразить что угодно.
2.Тоже можно.
Создаем погодный в определенной местности и делаем два триггера для контроля входа-выхода юнитов из нее. На искомых юнитов применяем нужные способности - и все готово.
Здесь чуть сложнее: нужно постоянно проверять тип местности под юнитом, но тоже можно. Проверка на ограждения тоже может бить сделана.
4.Это уже интереснее. Видел раньше подобное в играх. При каждой атаке юнита случайным образом наносим или не наносим доп. урон, эффект горения, кидаем спелл на цель в зависимости от теоретического места попадания атаки.
5.И это можно. Но нужно писать нестандартную систему Альянса. Но через триггеры и JASS все можно...
Продажа техники - лучше через способность, что бы кидать ее на понравившегося юнита, не стоит покупать кота в мешке. Стоимость должна зависеть от технического уровня юнита, его текущего состояния (мертвый танк попадет вам бесплатно, сами чините!), если он был модернизован дополнительно, то это тоже входит в стоимость. Разрешение на продажу делаем аналогично.
Это легко через Custom Value и переменние.
Как ты понял, все что ты предложил создать можно, но на это нужно потрать хороший кусок времени. Остается пожелать тебе удачи над созданием проекта - мне идея уже нравится.
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
DarkRaven Best, в картах есть 2 файла с кодом
j и wct
wct содержит тот код который отображается в редакторе
j файл содержит окончательный код который и работает в игре(с переменными, генерируемыми функциями и результатом гуи)
проги для взлома карт тупо перемещает код из j файла в wct (в том числе и генерируемые функции наподобие main)
при попытке сохранения карты код из wct перемещается в j и генерируются системные функции (например main)
но т.к. генерируемые функции уже перенеслись в j из wct получается повторение функций( например main из wct + сгенерированный main)
если же удалить/переименовать лишние функции в редакторе то функции будут сгенерированны не правильно (например в main будет отсутствовать инициализация библиотек)
для того чтобы всё нормально работало надо открыть карту в mpq редакторе и ручками править wct файл вычищая из него всё лишнее
для этого надо хорошо знать джасс
Попробуй через проверку уровня
Игрок одел кирку - дать\повысить уровень рудокопа до уровня 2
Игрок снял кирку - понизить лвл рудокопа до 1
Если он пытается копать, имея уровень абилки 1, то ломает руки :D
Если же абилка лвла 2, и он начинает копать, то копание проходит удачно
Proshel_Doty, иди учи тер вер
если тебя не устраивает то как работает здравый смысл то убей себя
если тебе повезёт то ты переродишься в мире который тебя устраивает
если хочешь чтобы срабатывала каждые 5 раз то это не случайность а тупо счётчик
Последний созданный юнит — это глобальная переменная. Скорее всего когда Вы обращаетесь к ней, то там находится не то значение, которое вы ожидаете. Используйте локальные переменные.
keks_090, чтобы кастовал бот - нужно триггерно приказать ему это сделать. Например, если тот же топот, то действие: Боевая единица - Приказ без цели (Issue Order With No Target), и выбираешь приказ: Вождь минотавров (Орда) - Громовая поступь. Аналогично с другими типами целей и спеллов. Нужно только выбрать приказ способности, на основе которой была создана триггерная способность.
на сколько я понял твой триггер срабатывает при получении урона определённым юнитом
и ты вызываешь в нём этот триггер
который наносит урон этому самому юниту
в результате опять срабатывает отлов урона
и опять наносится урон
и опять ...
в общем получается рекурсия и вар выкидывает из за переполнения стека
кстати почему бы не сделать отлов урона в 1 триггере?
шанс идёт через проверку "случайное число от 0 до 100 меньше чем x" где x - твой шанс
если под "оказаться позади противника" ты имеешь ввиду мгновенное перемещение то просто берёшь полярные координаты от (местоположение противника) с углом (угол поворота противника + 180) и расстоянием 100
если нужно плавное перемещение то тоже самое только юзаем системы движения которые описаны в статьях
так же могут понадобится знания геометрии которые изложены в статьях
Да сделай проще. Создай многоуровневую способность-пустышку. и когда отдаешь приказ атаковать в область, давай ему эту способность и с помощью неё отслеживай, какую область атаковать.
Например,
способность уровень 1, значит атаковать должен 1 область.
Уровень 2 - 2 область и т. д.
Не вижу смысла усложнять жизнь с хеш-таблицей.
Надеюсь понятно?) Отдал приказ, присвоил способность, после каста жди пару сек и в зависимости от уровня способности-пустышки отправляй в ту или иную область.
» WarCraft 3 / Как обычному юниту дать способность героя?
» WarCraft 3 / удаление событий
» WarCraft 3 / Локальный тригер
» WarCraft 3 / Несколько интересующих вопросов
» WarCraft 3 / Получение предмета
» WarCraft 3 / Перезарядка предмета
» WarCraft 3 / Как циклом удалять точки
» WarCraft 3 / Как удалить переменную типа юнит?
» WarCraft 3 / Как бы это сделать?
» WarCraft 3 / Редактирование карты
» WarCraft 3 / Туман войны
» WarCraft 3 / Модели на заказ
» WarCraft 3 / Модели на заказ
» WarCraft 3 / Что означает ошибка?
» WarCraft 3 / Морф любого юнита
» WarCraft 3 / Нестандартные способности
» WarCraft 3 / Общие войска: все.
» WarCraft 3 / Едкое дыхание
» WarCraft 3 / Необычное в редакторе.
» WarCraft 3 / абилки
» WarCraft 3 / Гром и Молния
» WarCraft 3 / Время в игре
» WarCraft 3 / триггер на атаку
» WarCraft 3 / довести до ума триггер